package com.fz;
import sun.font.FontDesignMetrics;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
/*这里面慢是Test 掉的方法*/

/**
 * Created by Administrator on 2017/5/4.
 */
public class ImgUtil {
    public int w;
    public int h;

    public Color getColor(int r, int g, int b, int a) {
        return new Color(r, g, b, a);
    }
    //水印文字效果
    // 就是图片上添加文字版权信息
    public void text(String i, String text, Color color, int size, int pos) {
        try {
            File img = new File(i);
            BufferedImage ii = ImageIO.read(img);//读入一个图片到画板中
            Graphics2D g = (Graphics2D) ii.getGraphics();//生成一个画笔操作图片
            this.w = ii.getWidth();//获取图片的宽度
            this.h = ii.getHeight();//获取图片的高度
            g.setColor(color);//设置字体颜色
            Font f = new Font("宋体", Font.BOLD, size);
            //设置水印文字的样式和大小(宋体，加粗，25号字体)
            FontDesignMetrics fm = sun.font.FontDesignMetrics.getMetrics(f);
            //已知字体的大小确定字体的长度和高度
            g.setFont(f);
            int tw = fm.stringWidth(text);//获取文本的宽度
            int th = fm.getHeight();//获取文本的高度
            //设置文本位置
            int x = 0;
            int y = 0;
            switch (pos) {
                case 1:
                    //左上角
                    x = 5;
                    y = th + 5;
                    break;
                case 2:
                    //中间
                    x = (w - tw) / 2;
                    y = (h - th) / 2;
                    break;
                case 3:
                    //右下角
                    x = w - tw - 10;
                    y = h - 10;
                    break;
                default:
                    //随机
                    Random r = new Random();
                    x = r.nextInt(w-tw-20)+10;
                    y = r.nextInt((h-20-th))+(th+10);
                    break;
            }
            g.drawString(text, x, y);//写入水印文字
            ImageIO.write(ii, "jpeg", img);
            //将添加水印文字的图片以jpeg格式存入新地址img
            g.dispose();//释放资源
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

   // 往图片中添加水印图标效果
    public void logo(String img, String logo, int pos) {
        try {
            BufferedImage i = ImageIO.read(new File(img));//读入一张图片到画板中
            Graphics2D g = (Graphics2D) i.getGraphics();//生成画笔操作图片
            int w = i.getWidth();//获取图片的宽度
            int h = i.getHeight();//获取图片的高度

            BufferedImage li = ImageIO.read(new File(logo));//读入一张logo图片
           int ww = li.getWidth();//获取logo的宽度
            int hh = li.getHeight();//获取logo的高度
            Random r = new Random();
            int x = r.nextInt(w -10- ww)+10;//随机位置
            int y = r.nextInt(h -10- hh)+10;//随机位置
            //设置logo的位置
            switch (pos) {
                case 1:
                    //左上角
                    x = 10;
                    y = 10;
                    break;
                case 2:
                    //中间
                    x = (w - ww) / 2;
                    y = (h - hh) / 2;
                    break;
                case 3:
                    //右下角
                    x = w-ww-10;
                    y = h - hh - 10;
                    break;

            }
            g.drawImage(li, x, y, null);
            ImageIO.write(i, "jpeg", new File(img));
            //将添加logo后的图片以jpeg的格式存入img
            g.dispose();//释放内存
        } catch (Exception e) {

        }
    }


    //实现图片的缩略
    public void thumb(String img,int width,String newimg) {

        try {
            BufferedImage i = ImageIO.read(new File(img));//读入一张图片到画板中
            int w = i.getWidth();//获取图片的宽度
            int h = i.getHeight();//获取图片的高度

            int nw = width;//设置缩小后的图片的宽度
            int nh = (int) (h * (double) nw / w);//按照比例设置图片的的高度
            BufferedImage newimage = new BufferedImage(w, h, 1);//制作一个画板用来存放缩放后的图片
            Graphics2D g = (Graphics2D) newimage.getGraphics();//生成画笔操作缩略图
            g.drawImage(i, 0, 0, nw, nh, 0, 0, w, h, null);//将原图按照宽高缩略
            ImageIO.write(newimage, "jpeg", new File(newimg));//将缩率后的图片存到url中
            g.dispose();//释放资源
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //实现图片的剪切
    public  void cut(String imurl,int x,int y ,int w ,int h ,String newurl){
        try {
            BufferedImage image = ImageIO.read(new File(imurl));//读入一个图片文件用于剪切
            BufferedImage newimage= new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);//生成一个画板用于存放剪切后的图片
            Graphics2D g = (Graphics2D)newimage.getGraphics();//生成画笔用于操作剪切图片
            g.drawImage(image,0,0,w,h,x,y,w+x,h+y,null);//将image图片从x,y坐标开始剪切，剪切宽度w，高度h
            ImageIO.write(newimage,"jpeg",new File(newurl));//将剪切好的图片存入文件中
            g.dispose();//释放资源
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    }
